package com.xuecheng.common.exception;

import com.xuecheng.common.domain.code.CommonErrorCode;
import com.xuecheng.common.domain.code.ErrorCode;
import com.xuecheng.common.domain.response.RestErrorResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

/**
 * <p>
 *     日志
 *     	1，日志框架：{@link Slf4j}
 *     	2，Slf4j只是一个规范的Api没有实现类：使用log4j2
 *     	3，每一个类中如果要使用日志
 *     		private static final Logger log = xxx：创建一个日志对象
 *     	4，Lombok使用 @Slf4j 来简化日志对象的创建
 *
 *
 * </p>
 *
 * @Description:
 */
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {

	@ResponseBody
	@ExceptionHandler(BusinessException.class)
	@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
	public RestErrorResponse customException(BusinessException e) {

		/**
		 * error方法参数
		 * 	1，错误信息
		 * 		在错误信息中可以使用占位符，用{}
		 * 	2，具体的错误内容
		 * 		e.getMessage 会把占位符进行替换
		 */
		log.error("【系统异常】{}",e.getMessage(),e);

		ErrorCode errorCode = e.getErrorCode();

		return new RestErrorResponse(errorCode);

	}

	@ResponseBody
	@ExceptionHandler(Exception.class)
	@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
	public RestErrorResponse exception(Exception e) {

		log.error("【系统异常】{}",e.getMessage(),e);

		return new RestErrorResponse(String.valueOf(CommonErrorCode.UNKOWN.getCode()),
				CommonErrorCode.UNKOWN.getDesc()+":"+e.getMessage());

	}
}
